﻿/** 面向方向检测的类,使用前需指定左,右对应的按键并新建实例
  新建实例后使用setup()函数使用

  By setycyas @2023-02-04
*/

class FaceDetector {

  ;实例变量,
  winTitle := "" ;安装方向检测的WIN_TITLE
  _leftKey := "left" ;左键
  _rightKey := "right" ;右键
  _face := "" ;当前方向对应的键

  ;构造函数,依次指定检测的WinTitle,左右键,其中WinTitle就是ahk定义热键生效时的WinTitle,如果空则响应所有输入
  __New(wTitle := "", leftKey := "left", rightKey := "right"){
    this.winTitle := wTitle
    this._leftKey := leftKey
    this._rightKey := rightKey
    this._face := this._rightKey
    return this
  }

  ;绑定左右按键响应,投入使用,在使用前还能重新设定wTitle
  setup(){
    if (this.winTitle == "") {
      Hotkey("~" . this._leftKey, this._onLeftKey.bind(this))
      Hotkey("~" . this._rightKey, this._onRightKey.bind(this))
    } else {
      HotIfWinActive(this.winTitle)
      Hotkey("~" . this._leftKey, this._onLeftKey.bind(this))
      Hotkey("~" . this._rightKey, this._onRightKey.bind(this))
      HotIfWinActive()
    }
  }

  /* 公有函数
  */

  ;获取当前面向方向
  face(){
    return this._face
  }
  ;获取当前方向的反方向
  back(){
    return (this._face == this._leftKey) ? this._rightKey : this._leftKey
  }

  ;手动设置当前面向方向,face应为字符串left或right,实际上如果不是left,都当作right
  setFace(face){
    if (face == "left"){
      this._face := this._leftKey
    } else {
      this._face := this._rightKey
    }
  }

  /* 私有函数
  */

  ;响应按左右键的函数
  _onLeftKey(key){
    this._face := this._leftKey
  }
  _onRightKey(key){
    this._face := this._rightKey
  }

}
